package com.taotao.common.bean;

import org.apache.http.conn.HttpClientConnectionManager;

//启动一个线程  定期关闭失效连接
/**
 * @Description:HttpClient虽然有连接池来管理连接。但是，如果访问的服务端已经断开了连接，
 * 		作为客户端的HttpClient是不知道的。此时，池中的这个连接就是一个无效的连接。如果这样的连接很多，
 * 		就会造成有效连接数的减少，服务器的压力变大，直至崩溃。因此，定期清理无效的链接显得尤为重要。
 * @author:     mingxu
 */
public class IdleConnectionEvictor extends Thread {

	private final HttpClientConnectionManager connMgr;

	private volatile boolean shutdown;

	public IdleConnectionEvictor(HttpClientConnectionManager connMgr) {
		this.connMgr = connMgr;
		//启动定期清理无效链接的线程
		this.start();
	}

	@Override
	//任务
	public void run() {
		try {
			while (!shutdown) {
				synchronized (this) {
					wait(50000);
					// 关闭失效的连接
					connMgr.closeExpiredConnections();
				}
			}
		} catch (InterruptedException ex) {
			// 结束

		}
	}

	//销毁方法
	public void shutdown() {
		shutdown = true;
		synchronized (this) {
			notifyAll();
		}
	}
}